"""
    访问地址：https://www.zhipin.com/?ka=header-home-logo

    模块：
        time
        DrissionPage 自动化
"""

import csv
import time
from DrissionPage import ChromiumPage

# 请求函数
def get_json(page):
    try:
        page.get(url='https://www.zhipin.com/?ka=header-home-logo', retry=3, interval=2, timeout=15)
        # 监听数据包
        page.listen.start('/wapi/zpgeek/search/joblist.json')
        # 等待搜索框加载
        page.wait.eles_loaded('.ipt-search')
        # 搜索职位
        page.ele('.ipt-search').input('python')
        time.sleep(2)
        # 点击搜索
        page.ele('.btn btn-search').click()
        # 获取前三页数据
        for i in range(1, 3):
            # 等待加载
            resp = page.listen.wait()
            # 获取数据包
            json_data = resp.response.body
            # 调用解析函数
            get_parse(data=json_data)
    except Exception as e:
        print(e)

# 解析函数
def get_parse(data):
    data_list = []
    for info in data['zpData']['jobList']:
        # 职位名称
        jobName = info['jobName']
        # 学历要求
        jobDegree = info['jobDegree']
        # 经验要求
        jobLabels = ' '.join(info['jobLabels'])
        # 职位描述
        jobSkills = ' '.join(info['skills'])
        # 工作地点
        address = info['cityName'] + info['areaDistrict'] + info['businessDistrict']
        # 薪资
        salaryDesc = info['salaryDesc']
        # 公司名称
        brandName = info['brandName']
        # 公司规模
        brandScaleName = info['brandScaleName']
        # 待遇
        if info['welfareList']:
            welfareList = ''.join(info['welfareList'])
        else:
            welfareList = '无'
        # 联系人姓名
        boosName = info['bossName']

        data_list.append({
            '职位名称': jobName,
            '学历要求': jobDegree,
            '经验要求': jobLabels,
            '职位描述': jobSkills,
            '工作地点': address,
            '薪资': salaryDesc,
            '公司名称': brandName,
            '公司规模': brandScaleName,
            '待遇': welfareList,
            'boss': boosName,
        })
    save_csv(data=data_list)

# 保存函数
def save_csv(data):
    for row in data:
        csv.writer(row)

if __name__ == '__main__':
    # 创建文件对象
    f = open('职位.csv', 'w', encoding='utf-8', newline='')
    # 字典写入方法，并创建表头
    csv_write = csv.DictWriter(f, fieldnames=['职位名称', '学历要求', '经验要求', '职位描述', '工作地点', '薪资','公司名称', '公司规模', '待遇', 'boss'])
    # 写入表头
    csv_write.writeheader()

    # 创建页面对象
    page = ChromiumPage()
    # 调用请求函数
    get_json(page=page)

    # 关闭文件
    f.close()